rework function to make page up/down behave the same as in GtkTextView.
authorKristian Rietveld <kris@gtk.org>
Sun, 10 Jul 2005 15:47:18 +0000 (15:47 +0000)
committerKristian Rietveld <kristian@src.gnome.org>
Sun, 10 Jul 2005 15:47:18 +0000 (15:47 +0000)
2005-07-10  Kristian Rietveld  <kris@gtk.org>

* gtk/gtktreeview.c (gtk_tree_view_move_cursor_page_up_down): rework
function to make page up/down behave the same as in GtkTextView.
(Fixes #101220, Owen Taylor).

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-8
gtk/gtktreeview.c

index 03f986e7a57a4ae02fee840236281b614fc19f5f..5cb956d97e791b66655a46e8c57d4f5266b0ec6b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-07-10  Kristian Rietveld  <kris@gtk.org>
+
+       * gtk/gtktreeview.c (gtk_tree_view_move_cursor_page_up_down): rework
+       function to make page up/down behave the same as in GtkTextView.
+       (Fixes #101220, Owen Taylor).
+
 2005-07-09  Kristian Rietveld  <kris@gtk.org>
 
        Fix #305737, patch from Tomislav Jonjic. This makes the
index 03f986e7a57a4ae02fee840236281b614fc19f5f..5cb956d97e791b66655a46e8c57d4f5266b0ec6b 100644 (file)
@@ -1,3 +1,9 @@
+2005-07-10  Kristian Rietveld  <kris@gtk.org>
+
+       * gtk/gtktreeview.c (gtk_tree_view_move_cursor_page_up_down): rework
+       function to make page up/down behave the same as in GtkTextView.
+       (Fixes #101220, Owen Taylor).
+
 2005-07-09  Kristian Rietveld  <kris@gtk.org>
 
        Fix #305737, patch from Tomislav Jonjic. This makes the
index 03f986e7a57a4ae02fee840236281b614fc19f5f..5cb956d97e791b66655a46e8c57d4f5266b0ec6b 100644 (file)
@@ -1,3 +1,9 @@
+2005-07-10  Kristian Rietveld  <kris@gtk.org>
+
+       * gtk/gtktreeview.c (gtk_tree_view_move_cursor_page_up_down): rework
+       function to make page up/down behave the same as in GtkTextView.
+       (Fixes #101220, Owen Taylor).
+
 2005-07-09  Kristian Rietveld  <kris@gtk.org>
 
        Fix #305737, patch from Tomislav Jonjic. This makes the
index f56b54b0774bd72148892d205d8263d378b57d83..6e472100e0e8e93cadba146273e1a2d4676cead5 100644 (file)
@@ -8617,6 +8617,7 @@ gtk_tree_view_move_cursor_page_up_down (GtkTreeView *tree_view,
   GtkRBNode *cursor_node = NULL;
   GtkTreePath *cursor_path = NULL;
   gint y;
+  gint window_y;
   gint vertical_separator;
 
   if (! GTK_WIDGET_HAS_FOCUS (tree_view))
@@ -8640,22 +8641,24 @@ gtk_tree_view_move_cursor_page_up_down (GtkTreeView *tree_view,
   g_return_if_fail (cursor_node != NULL);
 
   y = _gtk_rbtree_node_find_offset (cursor_tree, cursor_node);
-  y += count * tree_view->priv->vadjustment->page_size;
-  if (count > 0)
-    y -= ROW_HEIGHT (tree_view, GTK_RBNODE_GET_HEIGHT (cursor_node));
-  else if (count < 0)
-    y += ROW_HEIGHT (tree_view, GTK_RBNODE_GET_HEIGHT (cursor_node));
+  window_y = RBTREE_Y_TO_TREE_WINDOW_Y (tree_view, y);
+  y += count * (int)tree_view->priv->vadjustment->page_increment;
   y = CLAMP (y, (gint)tree_view->priv->vadjustment->lower,  (gint)tree_view->priv->vadjustment->upper - vertical_separator);
 
   if (y >= tree_view->priv->height)
     y = tree_view->priv->height - 1;
 
-  _gtk_rbtree_find_offset (tree_view->priv->tree, y, &cursor_tree, &cursor_node);
+  y -= _gtk_rbtree_find_offset (tree_view->priv->tree, y, &cursor_tree, &cursor_node);
   cursor_path = _gtk_tree_view_find_path (tree_view, cursor_tree, cursor_node);
   g_return_if_fail (cursor_path != NULL);
-  gtk_tree_view_real_set_cursor (tree_view, cursor_path, TRUE, TRUE);
-  gtk_tree_view_clamp_node_visible (tree_view, cursor_tree, cursor_node);
+  gtk_tree_view_real_set_cursor (tree_view, cursor_path, TRUE, FALSE);
   gtk_tree_path_free (cursor_path);
+
+  if (window_y < 0)
+    window_y = 0;
+  y -= window_y;
+
+  gtk_tree_view_scroll_to_point (tree_view, -1, y);
 }
 
 static void